package com.example.apidocserver.infrastructure.util.entity;

import com.example.apidocserver.domain.document.entity.ApiInfo;
import com.example.apidocserver.domain.document.entity.ApiParamHis;
import com.example.apidocserver.infrastructure.constants.SystemConstants;
import com.example.apidocserver.interfaces.vo.ApiInfoAllVo;
import com.example.apidocserver.interfaces.vo.ApiParamDescVo;
import org.springframework.beans.BeanUtils;

import java.util.Collections;

import static com.example.apidocserver.infrastructure.constants.SystemConstants.NO_DATA;
import static com.example.apidocserver.infrastructure.constants.SystemConstants.SEPARATOR_FIELD;

/**
 * 接口信息工具
 *
 * @author xyqlg
 */
public class ApiInfoUtil {
    /**
     * 生成初始化的接口、参数说明、示例说明对象
     *
     * @return 实体
     */
    public static ApiInfoAllVo getDefVo() {
        ApiInfoAllVo result = new ApiInfoAllVo();
        result.setApiInfo(new ApiInfo()).setApiParamDescVo(new ApiParamDescVo()).setApiParamHisList(Collections.emptyList())
                .setUpdateFlag(true).setCurrentParamHis(new ApiParamHis());
        return result;
    }

    /**
     * 生成默认的参数示例
     *
     * @return 参数示例对象
     */
    public static ApiParamHis getParamHis() {
        ApiParamHis apiParamHis = new ApiParamHis();
        apiParamHis.setEnableFlag(SystemConstants.YES).setParamDesc(NO_DATA).setParamInputBodyStr(NO_DATA)
                .setParamInputQueryStr(NO_DATA).setParamInputPathStr(NO_DATA).setParamInputHeaderStr(NO_DATA)
                .setParamOutputBodyStr(NO_DATA).setParamOutputHeaderStr(NO_DATA);
        return apiParamHis;
    }

    /**
     * 获取uniKey字段
     *
     * @param apiInfo 接口信息
     * @return uniKey
     */
    public static String getUniKey(ApiInfo apiInfo) {
        return apiInfo.getApiUri() + SEPARATOR_FIELD + apiInfo.getApiType() + SEPARATOR_FIELD + apiInfo.getServerId()
                + SEPARATOR_FIELD + apiInfo.getSpaceId();
    }

    /**
     * 值复制
     *
     * @param srcDate 源数据
     * @param result
     */
    public static void fromToVal(ApiInfo srcDate, ApiInfo result) {
        BeanUtils.copyProperties(srcDate, result);
    }
}
